MapStruct একটি Java annotation processor ব্যবহার করে ডোমেইন অবজেক্ট (POJOs) এর মধ্যে ম্যাপিং সম্পাদন করে। এক্ষেত্রে, যদি আপনার Superclass এবং Subclass থাকে এবং আপনি তাদের মধ্যে ম্যাপিং করতে চান, MapStruct তাও সহজে সমাধান করতে পারে। Subclass এবং Superclass এর মধ্যে Mapping এর উদ্দেশ্য হল, সুপারক্লাস এবং সাবক্লাসের মধ্যে ডেটা ট্রান্সফার করার প্রক্রিয়া।
MapStruct এ Inheritance Mapping খুবই সহজ এবং এটি @Mapping অ্যানোটেশন ব্যবহার করে কনফিগার করা যায়, যেখানে সাবক্লাসের ডেটা সুপারক্লাসে বা সুপারক্লাসের ডেটা সাবক্লাসে ম্যাপ করা হয়।
১. Superclass এবং Subclass এর মধ্যে Mapping এর ধারণা
MapStruct কে ব্যবহার করে, আপনি Superclass এবং Subclass এর মধ্যে ম্যাপিং করতে পারেন। MapStruct এর মাধ্যমে, আপনি Superclass থেকে Subclass অথবা Subclass থেকে Superclass তে ডেটা ম্যাপিং করতে পারবেন। এটি একটি সাধারণ মডেল মেপিং প্রক্রিয়া যা inheritance (উত্তরাধিকার) এর ভিত্তিতে কাজ করে।
২. Superclass এবং Subclass Example
ধরা যাক, আমাদের কাছে একটি Superclass (Parent Class) এবং একটি Subclass (Child Class) রয়েছে, এবং আমাদের এই দুটি ক্লাসের মধ্যে ম্যাপিং করতে হবে।
উদাহরণ ১: Superclass এবং Subclass
Superclass (Person.java)
public class Person {
private String name;
private int age;
// Getters and Setters
}
Subclass (Employee.java)
public class Employee extends Person {
private String department;
// Getters and Setters
}
এখানে, Employee ক্লাসটি Person ক্লাসকে extends করে, তাই Employee ক্লাসে Person ক্লাসের সব ফিল্ড (name, age) মিরর করা হবে।
MapStruct Mapper Interface
এখন, আমাদের একটি Mapper Interface তৈরি করতে হবে যা Person এবং Employee ক্লাসের মধ্যে ম্যাপিং করবে।
PersonEmployeeMapper.java
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonEmployeeMapper {
PersonEmployeeMapper INSTANCE = Mappers.getMapper(PersonEmployeeMapper.class);
// Mapping method from Person to Employee
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
@Mapping(target = "department", constant = "IT") // Example of setting a constant value for department
Employee personToEmployee(Person person);
// Mapping method from Employee to Person (If needed)
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
Person employeeToPerson(Employee employee);
}
Code Explanation:
personToEmployeeমেথডে, Person অবজেক্টকে Employee অবজেক্টে ম্যাপ করা হয়েছে।@Mappingঅ্যানোটেশন ব্যবহার করে আপনি ফিল্ড ম্যাপিং কনফিগার করেছেন।- Department ফিল্ডে, আমরা একটি constant মান সেট করেছি (যেমন "IT")।
এভাবে, আপনি Superclass এবং Subclass এর মধ্যে ডেটা ম্যাপিং করতে পারেন। উপরে দেওয়া উদাহরণে, আমরা Person থেকে Employee তে এবং Employee থেকে Person তে ডেটা ম্যাপ করেছি।
৩. Superclass এবং Subclass এর মধ্যে Mapping এর সুবিধা
- Inheritance Support: MapStruct স্বয়ংক্রিয়ভাবে Superclass এবং Subclass এর মধ্যে ফিল্ড এবং বৈশিষ্ট্য সমন্বিত করতে পারে।
- Reuse Mapping Code: আপনি Superclass এর জন্য একটি সাধারণ ম্যাপিং কোড তৈরি করতে পারেন, এবং সেটি Subclass এর জন্যও ব্যবহার করতে পারবেন।
- Type Safety: MapStruct টাইপ সেফটি নিশ্চিত করে, যাতে Superclass এবং Subclass এর মধ্যে ভুল ম্যাপিং না হয়।
- Compile-time code generation: এটি রানটাইম ওভারহেড কমায়, কারণ MapStruct কোড জেনারেট করে compile-time এ।
৪. Additional Considerations for Inheritance Mapping
MapStruct ইনহেরিটেন্স (Inheritance) ম্যাপিংয়ের ক্ষেত্রে কিছু অতিরিক্ত বৈশিষ্ট্য সরবরাহ করে:
- Polymorphic Mapping: যদি Person বা তার সাবক্লাস Employee এমন ডোমেইন অবজেক্টগুলির মধ্যে polymorphic সম্পর্ক থাকে, তবে MapStruct সেই সম্পর্ক অনুযায়ী উপযুক্ত ম্যাপিং করতে সক্ষম।
- Constructor-based Mapping: যদি আপনি কোনও constructor-based mapping করতে চান, তবে @Mapping অ্যানোটেশন ব্যবহার করে কাস্টম কনস্ট্রাক্টর সিলেক্ট করা যেতে পারে।
উদাহরণ: Polymorphic Mapping
@Mapper
public interface PolymorphicMapper {
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
Person polymorphicToPerson(Employee employee);
}
এখানে, Employee থেকে Person এ পোলিমরফিক ম্যাপিং করার চেষ্টা করা হচ্ছে।
৫. Conclusion
MapStruct কে ব্যবহার করে Superclass এবং Subclass এর মধ্যে ম্যাপিং করা খুবই সহজ। এটি ডোমেইন অবজেক্টগুলির মধ্যে inheritance সম্পর্কিত ডেটা ট্রান্সফার বা ম্যাপিং করার জন্য একটি শক্তিশালী উপায় প্রদান করে। MapStruct এর সাহায্যে আপনি @Mapping অ্যানোটেশন ব্যবহার করে এবং compile-time code generation সুবিধার মাধ্যমে সুপারক্লাস এবং সাবক্লাসের মধ্যে খুব সহজে এবং দ্রুত ডেটা ম্যাপ করতে পারবেন।